package com.cx.webpay.util;

import java.io.File;
import java.io.FileOutputStream;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfWriter;

import com.cx.webpay.model.FileVo;


/**
 * pdf 处理工具
 */
public class PDFUtil {
	
	private final static Logger log=LoggerFactory.getLogger(PDFUtil.class);
		
	private String defaultKey=FileCommonConstant.DOCUMENT_ENCRYPT_KEY; 
	
	/**
	 * pdf 限制复制 更改内容, 只有打印功能
	 * @param orginFile 原文件
	 * @param projId 项目id
	 * @param parentId 原文件id 
	 * @return
	 * @throws Exception
	 */
	public FileVo encryptPdfFile(File orginFile,String projId,String parentId) throws Exception{
		PdfReader reader = new PdfReader(orginFile.getPath());// 待加水印的文件
		FileVo fileInfo=new FileVo();
        String uid=DateUtil.uuidRandom();
        String filename=orginFile.getName();
        String ext=FilenameUtils.getExtension(filename);
        String path=projId+"/"+DateUtil.getLocalDateString()+"/";
        String newFileName=uid+"."+ext;
        fileInfo.setDoType(FileExecuteEnum.FILE_ENCRYPTION.getCode()+"");
		fileInfo.setExt(ext);
		fileInfo.setFileId(uid);
		fileInfo.setFileName(filename);
		fileInfo.setParentId(parentId);
		fileInfo.setSize(orginFile.length()+"");
		fileInfo.setPath(path+newFileName);
		File newfileDir=new File(FileCommonConstant.FILE_SAVE_FILE_DEFAULT+path);
		if(!newfileDir.exists()){newfileDir.mkdirs();}
		File newfile=new File(FileCommonConstant.FILE_SAVE_FILE_DEFAULT+path+newFileName);
		if(newfile.exists()){newfile.delete();}
		newfile.createNewFile();
		PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(newfile));// 加完水印的文件
		stamper.setEncryption(null, defaultKey.getBytes(), PdfWriter.AllowCopy, false);//限制复制 更改信息
		stamper.setEncryption(null, defaultKey.getBytes(), PdfWriter.AllowModifyAnnotations, false);//限制复制 更改信息
		stamper.setEncryption(null, defaultKey.getBytes(), PdfWriter.AllowModifyContents, false);//限制复制 更改信息
		stamper.setEncryption(null, defaultKey.getBytes(), PdfWriter.AllowPrinting, true);//限制复制 更改信息
		stamper.close();
		reader.close();
		return fileInfo;
	}
	/**
	 * 创建pdf文件
	 * @param targetUrl 要生成pdf的网页
	 * @param pdfFileSavePath pdf保存的路径
	 * @return
	 */
	public static boolean create(String targetUrl,String pdfFileSavePath){	
			pdfFileSavePath=FileCommonConstant.FILE_SAVE_FILE_DEFAULT+pdfFileSavePath;
			File file = new File(pdfFileSavePath);
	        File parent = file.getParentFile();
	        // 如果pdf保存路径不存在，则创建路径
	        if (!parent.exists()) { parent.mkdirs(); }
	        String TOPDFTOOL = FileCommonConstant.WKHTMLTOPDFPATH;	
	        StringBuilder cmd = new StringBuilder();
	        cmd.append(TOPDFTOOL);
	        cmd.append(" ");
	        cmd.append("--page-size A4");// 参数
	        cmd.append(" ");
	        cmd.append(targetUrl);
	        cmd.append(" ");
	        cmd.append(pdfFileSavePath);
	        log.info(cmd.toString());
	        boolean result = true;
	        try {
	        	long t1=System.currentTimeMillis();
	            Process proc = Runtime.getRuntime().exec(cmd.toString());
	            HtmlToPdfInter error = new HtmlToPdfInter( proc.getErrorStream());
	            HtmlToPdfInter output = new HtmlToPdfInter( proc.getInputStream());
	            error.run();
	            output.run();
	            proc.waitFor();
	            long t2=System.currentTimeMillis();
				System.out.println("文件生成时间："+(t2-t1)+"ms");
	        } catch (Exception e) {
	        	e.printStackTrace();
	        	log.error("-----pdf 文件生成错误--",e);
	            result = false;
	        }
			
			return result;
		}
}
